
//导入数据库操作
const db =require('../db/index');
//导入处理密码的模块
const bcrypt = require('bcryptjs'); 

//获取用户基本信息的处理函数
exports.getUserInfo = (req, res)=>{
    
    // 根据用户的 id，查询用户的基本信息
    // 注意：为了防止用户的密码泄露，需要排除 password 字段
    const sql = 'select id,username,nickname,email, user_pic from ev_users where id=?';
   
    // 注意：req 对象上的 user 属性，是 Token 解析成功，express-jwt 中间件帮我们挂载上去的
    db.query(sql, req.user.id, (err,results)=>{
       
        //1.执行SQL语句失败
        if(err) return res.send(err);
        
        //2.执行SQL语句成功，但是查询到的数据条数不等于 1
        if(results.length !== 1 ) return res.send('获取用户信息失败！')
       
        //3.将用户信息响应给客户端
        res.send({
            status:0,  //状态码
            msg:'获取用户基本信息成功！',
            data:results[0], //对应查询的用户信息
        })
    })

}


//更新用户基本信息的基本处理函数
exports.updateUserInfo  =(req, res)=>{
   //定义待执行的SQL语句
   const sql = 'update ev_users set ? where id=?';
   
   //调用db.query() 执行SQL语句并传递参数
   db.query(sql, [req.body, req.body.id], (err, results)=>{

    //执行SQL语句失败
    if(err) return res.cc(err);

    //执行SQL语句 成功 ，但是影响行数不等于 1
    if(results.affectedRows !== 1) return res.cc('更新用户基本信息失败！');
    
    //成功
    res.cc('更新用户信息成功')
   })
}

//重置密码的处理函数
exports.updatePassword = (req,res)=>{
    //根据 id 查询用户的信息
    const sql = 'select * from ev_users where id=?';

    //执行根据id 查询用户的信息的 SQL语句
    db.query(sql, req.user.id, (err,results)=>{
        //执行SQL语句失败
        if(err) return res.cc(err);

        //判断结果是否存在
        if(results.length !==1 ) return res.cc('用户不存在');

        //判断使用输入的旧密码是否正确
        //通过 compareSync () 获取req.body()传过来的密码             和数据库中的密码对比
       const  compareResult  = bcrypt.compareSync(req.body.oldPwd, results[0].password);
       if(!compareResult) return res.cc('原密码错误！')

       
       //定义更新用户密码SQL语句
       const sql = 'update ev_users set password=? where id=?';

       //对新密码进行 bcrypt 加密处理
       const newPwd = bcrypt.hashSync(req.body.newPwd, 10);

       //执行SQL语句，根据id 更新用户密码
       db.query(sql, [newPwd, req.user.id], (err, results)=>{
        //SQL语句失败
        if(err) return res.cc(err)

        //SQL语句执行成功，但是影响行数不等于1 
        if(results.affectedRows !== 1) return res.cc('更新密码失败！');

        //更新密码成功
        res.cc('更新密码成功')
       })
    })
}


//更换头像的处理函数
exports.updateAvatar = (req, res)=>{
   //1.定义更新用户头像的SQL语句
   const sql = 'update ev_users set user_pic=? where id=?';

   //2.调用 db.query() 执行SQL语句，更新对应用户的头像
   db.query(sql, [req.body.avatar, req.user.id], (err, results)=>{
    //执行SQL语句失败
    if(err) return res.cc(err);

    //执行sql语句成功，但是影响行数不等于1
    if(results.affectedRows !== 1) return res.cc('更换头像失败');

    //更换头像成功
    res.cc('更换头像成功', 0)
   })
}